package respsa;

import java.util.HashSet;
import java.util.Set;

import agente.MemElem;
import ambiente.Accao;
import espest.OperadorAbstracto;
import espest.Transicao;

public class OperadorGeral implements OperadorAbstracto<EstadoPosicao>{
 
	private Set<OperadorConcreto> operadores;
	
	public OperadorGeral(Accao.Tipo tipo, MemElem crencas){
		Accao[] accoes = Accao.gerarAccoes(tipo);
		operadores = new HashSet<OperadorConcreto>();
		for(Accao ac: accoes)
			operadores.add(new OperadorConcreto(ac, crencas));
			
	}
	
	@Override
	public Set<Transicao<EstadoPosicao>> aplicar(EstadoPosicao estado) {
		// TODO Auto-generated method stub
		Set<Transicao<EstadoPosicao>> transicoes = new HashSet<Transicao<EstadoPosicao>>();
		transicoes.clear();
		for(OperadorConcreto op: operadores){
			Transicao<EstadoPosicao> nTr = op.transitar(estado);
			if(nTr!=null)
				transicoes.add(nTr);
		}
		if(transicoes.size()!=0)
			return transicoes;
		else
			return null;

	}	

}
